package com.taotao.manage.controller;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.github.pagehelper.PageInfo;
import com.taotao.common.bean.EasyUIResult;
import com.taotao.manage.pojo.Item;
import com.taotao.manage.service.ItemService;

/**
 * @Description:商品控制层
 * @author:     mingxu
 */
@RequestMapping("item")
@Controller
public class ItemController {

	@Autowired
	private ItemService itemService;

	/**
	 * @Description:添加商品
	 * 		请求地址：rest/item   post请求
	 * 		请求参数：商品所有字段，以及商品描述字段
	 * 		结果响应：不需要响应数据，需要响应状态码
	 * @return
	 * @author mingxu
	 */
	@RequestMapping(method = RequestMethod.POST)
	public ResponseEntity<Void> addItem(Item item, @RequestParam("desc") String desc) {
		try {
			//测试请求参数异常的一个例子
			if (StringUtils.isBlank(item.getTitle())) {
				return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
			}

			/**
			 *	spring为每一次从Controller到Service的请求开启一次事务，为保证添加商品和添加商品描述操作的原子性
				可以调用一次service完成添加上和商品描述的两个操作 
			 */

			// 设置状态status初始值
			item.setStatus(1);
			// 保证ID为null,通过数据库自增获得
			item.setId(null);

			// 添加商品和商品描述
			itemService.addItemAndDesc(item, desc);

			return ResponseEntity.status(HttpStatus.CREATED).build();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();

	}

	/**
	 * @Description:分页查询所有商品数据
	 * @param pageNum 当前页
	 * @param pageSize 当前页展示的数据
	 * @return
	 * @author mingxu
	 * 
	 * 		请求路径：/rest/item  GET请求
	 * 		请求参数：page  rows
	 * 		响应数据：total总记录数、 rows结果集集合
	 */
	@RequestMapping(method = RequestMethod.GET)
	public ResponseEntity<EasyUIResult> queryAll(@RequestParam(value = "page", defaultValue = "1") Integer pageNum,
			@RequestParam(value = "rows", defaultValue = "30") Integer pageSize) {
		try {
			//查询分页数据,并按照更新时间倒序
			PageInfo<Item> pageInfo = itemService.queryPageListByWhereOrderBy(Item.class, "updated desc", pageNum,
					pageSize);
			if (pageInfo == null || pageInfo.getSize() == 0) {
				return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
			}
			//封装数据到EasyUIResult
			EasyUIResult easyUIResult = new EasyUIResult();
			easyUIResult.setTotal(pageInfo.getTotal());
			easyUIResult.setRows(pageInfo.getList());

			//响应数据
			return ResponseEntity.status(HttpStatus.OK).body(easyUIResult);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
	}

	/**
	 * @Description:修改商品
	 * 	
	 * 	请求路径：/rest/item
	 * 	请求参数：Item  desc
	 * 
	 */
	@RequestMapping(method = RequestMethod.PUT)
	public ResponseEntity<Void> updateItem(Item item, @RequestParam("desc") String desc) {
		try {
			//测试请求参数异常的一个例子
			if (StringUtils.isBlank(item.getTitle())) {
				return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
			}

			// 修改商品和商品描述
			itemService.updateItemAndDesc(item, desc);

			return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();

	}

}
